package net.qiqbframework.modelling.domain;


import net.qiqbframework.description.NamedModel;

import java.util.Collection;
import java.util.Map;
import java.util.Optional;

/**
 * 领域实体模型
 */
public interface EntityModel<T> extends NamedModel {
    /**
     * 父实体
     *
     * @return
     */
    Optional<EntityModel<?>> parentEntityModel();

    Class<? extends T> entityClass();

    /**
     * 实体ID
     */
    Object getIdentifier(T target);

    /**
     * 获取所有业务ID
     *
     * @param target
     * @return
     */
    Map<BizIdentifierModel<?>, Object> getBizIdentifiers(T target);

    /**
     * 一个实体只能有一个ID
     *
     * @return
     */
    BizIdentifierModel<?> getEntityIdModel();

    BizIdentifierModel<?> getBizIdentifierModel(String businessIdName);


    /**
     * 获取实体内所有业务ID
     *
     * @return
     */
    Collection<BizIdentifierModel<?>> allBizIdentifierModels();


}
